//package com.weseal.config;
//
//import com.weseal.common.PartDispatcherServlet;
//import com.weseal.utils.SpringContextUtil;
//import org.springframework.core.annotation.Order;
//import org.springframework.web.WebApplicationInitializer;
//import org.springframework.web.bind.annotation.ExceptionHandler;
//import org.springframework.web.context.WebApplicationContext;
//import org.springframework.web.filter.CharacterEncodingFilter;
//import org.springframework.web.filter.DelegatingFilterProxy;
//import org.springframework.web.servlet.DispatcherServlet;
//import org.springframework.web.servlet.NoHandlerFoundException;
//import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
//
//import javax.servlet.Filter;
//import javax.servlet.FilterRegistration;
//import javax.servlet.ServletContext;
//import javax.servlet.ServletException;
//import javax.servlet.ServletRegistration;
//import javax.servlet.annotation.HandlesTypes;
//
///*
// * 所有实现了WebApplicationInitializer接口的类都会在容器启动时自动被加载运行，用@Order注解设定加载顺序
// * 这是servlet3.0+后加入的特性，web.xml中可以不需要配置内容，都硬编码到WebApplicationInitializer的实现类中
// */
////spring DispatcherServlet的配置,其它servlet和监听器等需要额外声明，用@Order注解设定启动顺序
////@Order(2)
////public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
//
//	/*
//	  * DispatcherServlet的映射路径
//	  */
//	@Override
//	protected String[] getServletMappings() {
//		return new String[]{"/"};
//	}
//
//	/*
//	  * 应用上下文，除web部分
//	  */
//	@SuppressWarnings({"unchecked", "rawtypes"})
//	@Override
//	protected Class[] getRootConfigClasses() {
//		return new Class[]{AppConfig.class};
//	}
//
//	/*
//	  * web上下文
//	  */
//	@SuppressWarnings({"unchecked", "rawtypes"})
//	@Override
//	protected Class[] getServletConfigClasses() {
//		return new Class[]{MvcConfig.class};
//	}
//
//	/*
//	  * 注册过滤器，映射路径与DispatcherServlet一致，路径不一致的过滤器需要注册到另外的WebApplicationInitializer中
//	  */
//	@Override
//	protected Filter[] getServletFilters() {
//		CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
//		characterEncodingFilter.setEncoding("UTF-8");
//		characterEncodingFilter.setForceEncoding(true);
//		return new Filter[]{characterEncodingFilter};
//	}
//
//	/*
//	  * 可以注册DispatcherServlet的初始化参数，等等
//	  */
//	@Override
//	protected void customizeRegistration(ServletRegistration.Dynamic registration) {
//		//registration.setInitParameter("spring.profiles.active", "default");
//		registration.setInitParameter("throwExceptionIfNoHandlerFo‌​und", "true");
//
//	}
//
//
//	@Override
//	protected DispatcherServlet createDispatcherServlet(WebApplicationContext servletAppContext) {
//		PartDispatcherServlet partDispatcherServlet = new PartDispatcherServlet(servletAppContext);
//		partDispatcherServlet.setThrowExceptionIfNoHandlerFound(true);
//		return partDispatcherServlet;
//	}
//
//	@ExceptionHandler(NoHandlerFoundException.class)
//	public String handle(Exception ex) {
//		return "404";//404是视图名
//	}
//
//	/*
//	 * 创建一个可以在非spring管理bean中获得spring管理的相关bean的对象：
//	 */
//	@Override
//	protected WebApplicationContext createRootApplicationContext() {
//		// TODO Auto-generated method stub
//		WebApplicationContext ctx = super.createRootApplicationContext();
//		SpringContextUtil.setApplicationContext(ctx);
//		return ctx;
//	}
//
//
//}
